import Koa from 'koa';
import { koaBody } from 'koa-body';
import path from 'path';
import json from 'koa-json';

import parameter from 'koa-parameter';

// 静态路径
import KoaStatic from 'koa-static';
import mount from 'koa-mount';


import { AjaxResult } from './utils/AjaxResult.js';


import config from './config/config.js';

import router from './router/index.js';

import { logger, accessLogger } from './utils/logger.js';

import { getRunTime } from './utils/utils.js';


import cors from 'koa2-cors'

const app = new Koa();


//美化json
app.use(json());
//添加日志
app.use(accessLogger());


//读取配置文件
app.use(koaBody({
  multipart: true,
  formidable: {
    //文件路径,不推荐使用相对路径
    uploadDir: path.join(__dirname, 'uploads'),
    //保存扩展名
    keepExtensions: true,
    // 设置允许上传的文件格式
    allowedFileTypes: ['image/jpeg', 'image/png', 'image/jpg'],
    // 设置文件上传大小限制
    maxFileSize: 200 * 1024 * 1024, // 例如: 200MB
  },
  onError (err) {
    logger.error(err)
  }
}))

//返回值
app.use(AjaxResult({ type: 'json' }));

//静态资源
app.use(mount('/static', KoaStatic(path.join(__dirname, 'uploads'))))

//ctx 添加verifyParams方法
app.use(parameter(app));

//路由 router.allowedMethods 返回501错误
app.use(router.routes()).use(router.allowedMethods());

//跨域
app.use(cors({
  origin: function (ctx) {
    return '*'; //允许跨域的域名
  },
  exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],//设置获取其他自定义字段
  maxAge: 5,//指定本次预检请求的有效期，单位为秒。
  credentials: true, //是否允许发送Cookie
  allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], //设置所允许的HTTP请求方法
  allowHeaders: ['Content-Type', 'Authorization', 'Accept'], //设置服务器支持的所有头信息字段
}))


//统一异常处理
app.on('error', (err, next) => {
  logger.error('err', err)
})


console.log('port', config.SERVER_PORT);

app.listen(config.SERVER_PORT, () => {
  console.log('server is running at http://localhost:3000');
  logger.info('server is running at http://localhost:3000');
});